﻿using System;
using System.Data;
using System.Windows.Forms;
using CentroVentas.Clases.Utiles;

namespace CentroVentas.Funciones.Compras
{
    public partial class FunComprasCrear : Form
    {

        DataSet dsProductos = new DataSet();

        private int _idCompra;

        public int IdCompra
        {
            get { return _idCompra; }
            set { _idCompra = value; }
        }

        private int _idUsuario;

        public int IdUsuario
        {
            get { return _idUsuario; }
            set { _idUsuario = value; }
        }

        private int _idProveedor = 0;

        public int IdProveedor
        {
            get { return _idProveedor; }
            set { _idProveedor = value; }
        }

        public FunComprasCrear(int usuario)
        {
            IdUsuario = usuario;
            InitializeComponent();
            dsProductos.Tables.Add("Productos");
            dsProductos.Tables["Productos"].Columns.Add("Id");
            dsProductos.Tables["Productos"].Columns.Add("CodigoBarras");
            dsProductos.Tables["Productos"].Columns.Add("Descripcion");
            dsProductos.Tables["Productos"].Columns.Add("TipoProducto");
            dsProductos.Tables["Productos"].Columns.Add("Marca");
            dsProductos.Tables["Productos"].Columns.Add("IdPrecio");
            dsProductos.Tables["Productos"].Columns.Add("Costo");
            dsProductos.Tables["Productos"].Columns.Add("Utilidad");
            dsProductos.Tables["Productos"].Columns.Add("Impuesto");
            dsProductos.Tables["Productos"].Columns.Add("PrecioVenta");
            dsProductos.Tables["Productos"].Columns.Add("Comentarios");
            dsProductos.Tables["Productos"].Columns.Add("Cantidad");
            dsProductos.Tables["Productos"].Columns.Add("CMinima");

            ActualizarGrilla();
        }

        private void ActualizarGrilla()
        {
            dgv.DataSource = dsProductos;
            dgv.DataMember = dsProductos.Tables["Productos"].TableName;

            dgv.Columns["Id"].Visible = false;
            dgv.Columns["IdPrecio"].Visible = false;

            getTotalProductos();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            CentroVentas.Funciones.Productos.FunProductosCrear fun = new Funciones.Productos.FunProductosCrear(true);
            if (fun.ShowDialog() == DialogResult.OK)
            {
                DataRow dr = dsProductos.Tables["Productos"].NewRow();
                dr[0] = fun.Id;
                dr[1] = fun.Codigo;
                dr[2] = fun.Desc;
                dr[3] = fun.Tipo;
                dr[4] = fun.Marca;
                dr[5] = fun.IdPrecio;
                dr[6] = fun.Costo;
                dr[7] = fun.Utilidad;
                dr[8] = fun.Iva;
                dr[9] = fun.Precio;
                dr[10] = fun.Comentarios;
                dr[11] = fun.Cantidad;
                dr[12] = fun.Minimo;
                dsProductos.Tables["Productos"].Rows.Add(dr);
                ActualizarGrilla();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try 
            {
                CentroVentas.Clases.Funciones.Proveedores prov = new Clases.Funciones.Proveedores(txtRut.Text);
                txtProv.Text = prov.Nombre;
                IdProveedor = prov.Id;                
            }catch(Exception)
            {
                CentroVentas.Clases.Utiles.Utilidades.mensaje(Clases.Utiles.TipoMensaje.ERROR, "No existe Proveedor", 31);
            }
        }

        private void txtRut_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar('\r'))
            {
                try
                {
                    CentroVentas.Clases.Funciones.Proveedores prov = new Clases.Funciones.Proveedores(txtRut.Text);
                    txtProv.Text = prov.Nombre;
                    IdProveedor = prov.Id;
                }
                catch (Exception)
                {
                    Utilidades.mensaje(TipoMensaje.ERROR, "No existe Proveedor", 31);
                }
            }
        }

        private void getTotalProductos()
        {
            double total = 0;
            foreach (DataRow dr in dsProductos.Tables["Productos"].Rows)
            {
                total += (Convert.ToDouble(dr["Costo"]) * Convert.ToDouble(dr["Cantidad"]));
            }
            txtPrecio.Text = CentroVentas.Clases.Currency.formatearMoneda(total);
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (dsProductos.Tables["Productos"].Rows.Count != 0)
            {
                if (IdProveedor != 0)
                {
                    IdCompra = Clases.Funciones.Compras.CrearCompra(IdUsuario, IdProveedor, txtComentarios.Text, dsProductos);
                    if (IdCompra != 0)
                    {
                        this.DialogResult = DialogResult.OK;

                        Clases.Reportes.ImprimirCompra(IdCompra);

                        this.Dispose();
                    }
                }
                else
                {
                    Utilidades.mensaje(TipoMensaje.ERROR, "No ha seleccionado proveedor.", 35);
                }
            }
            else
            {
                Utilidades.mensaje(TipoMensaje.ERROR, "No existen productos seleccionados.", 35);
            }                        
        }

        

        

    }
}
